#!/bin/sh

SHELL="install94421A"
MODULE="drv94421A"
DEVICE="EX94421A"

# kernel version
KERNEL=`uname -r` 

# define modules permissions 
MODE=666

# load & unload modules command
INSMOD=/sbin/insmod;
UNINSMOD=/sbin/rmmod;

#run at boot time 
BOOTDIR=/etc/init.d

#modules directory
MODDIR="/lib/modules/misc"
if [ ! -d $MODDIR ]; then 
	MODDIR="/lib/modules/${KERNEL}/kernel/drivers/misc"
fi

#Dynamic library directory
LIB="lib94421A"
LIBDIR="/usr/lib"
if [ ! -d $LIBDIB ];then
	LIBDIR="/usr/lib64"
fi

#Save Demo directory
# DEMO="EX94421Ademo"
BINDIR="/usr/bin"
if [ ! -d $BINDIR ];then
	BINDIR="/home"
fi

# Root or die
if [ "$(id -u)" != "0" ]
then
  echo "You must be root to load or unload kernel modules"
  exit 1
fi

#Install EX94421A
setup() {

	printf "Select your System on install (r=RedHat , d=Debian) : "	
	read name
        if(test $name = "r")then
	 cp ./$SHELL $BOOTDIR
	 ln -s $BOOTDIR/$SHELL /etc/rc5.d/S80$SHELL
         name="RedHat"
         echo "System on $name"
        elif(test $name = "d" )then
	 update-rc.d $SHELL defaults
         name="Debian"
         echo "System on $name"
        else
	  echo "Please select your system"
          exit 1
        fi

	cp ./$SHELL $BOOTDIR
	echo "Install script on Boot....$SHELL"

	install -d $MODDIR
	install -c $MODULE.ko $MODDIR
	echo "Install $MODULE.ko .... $MODDIR"

	cp ./dll/$LIB.so $LIBDIR
	echo "Install $LIB.so .... $LIBDIR"

	cp ./demo/bin/$DEMO $BINDIR
	echo "Install $DEMO .... $BINDIR"

} 


#Load Moudules
start() {

	NEW_MODULE=`awk "\\$1==\"$MODULE\" {print \\$1}" /proc/modules`
	if [ "$NEW_MODULE" != "$MODULE" ];then
      	$INSMOD $MODDIR/$MODULE.ko || exit 1
	fi
	echo "Load Modules $MODULE....OK"
 	remove_dev	
	creat_dev
}

# Creat dev files 
creat_dev() {

MAJOR=`awk "\\$2==\"$DEVICE\" {print \\$1}" /proc/devices`
if [ "$MAJOR" = "0" ];then
 echo "Load device major....FAILED"
 exit 1
else
 echo "Load device major....$MAJOR"
 mknod /dev/$DEVICE c $MAJOR 0
 chmod $MODE /dev/$DEVICE
fi

}

# Remove /dev file 
remove_dev () {
    rm -f /dev/$DEVICE
}

# Remove file
uninstall() {

    rm -f $LIBDIR/$LIB.so
    echo "Uninstall $LIB.so....Success !!"
    rm -f $BINDIR/$DEMO
    echo "Uninstall $DEMO....Success !!"
    rm -f /etc/rc5.d/S80$SHELL
    rm -f $BOOTDIR/$SHELL 
    echo "Uninstall shell script....Success !!"

    if $UNINSMOD $MODULE.ko; then
    remove_dev
    else
    	echo "FAILED!"
	exit 1
    fi

    rm -f $MODDIR/$MODULE.ko
    echo "Uninstall $MODULE.ko....Success !!"
}

# Unload device
reload() {

    if $UNINSMOD $MODULE.ko; then
    remove_dev
    else
    	echo "FAILED!"
	exit 1
    fi

   echo "Rmmod modules $MODULE.ko....Success !!"

   NEW_MODULE=`awk "\\$1==\"$MODULE\" {print \\$1}" /proc/modules`
   if [ "$NEW_MODULE" != "$MODULE" ];then
   $INSMOD $MODDIR/$MODULE.ko || exit 1
   fi
   remove_dev	
   creat_dev
   echo "Reload Modules $MODULE....Success !!"
}

case "$1" in
  start)
    echo "** Loading $DEVICE **"
    start
    ;;
  uninstall)
    echo "** Uninstall $DEVICE **"
    uninstall
    ;;
  setup)
    echo "** Install $DEVICE **"
    setup 
    ;;
  reload)
    echo "** Reload $DEVICE **"
    reload
    ;;
  *)
    echo "Usage : $0 { setup | start | uninstall | reload } "
    exit 1
esac